﻿/*!
 * 定义模块 Mop (日志管理) 中所有功能的服务 API。
 * 
 * Copyright (c), 上海沃恩信息科技有限公司.
 * All rights reserved.
 * Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

/*
 * @param {Object} $    jQuery 命名空间。
 * @param {Object} $$   pittypat 命名空间。
 * @param {Object} _mod 模块 Mop (日志管理) 的命名空间。
 * 
 * 更多说明请参见：
 * https://www.pittypat.work/com/waln/pittypat/coding/help/_api.js.html。
 */
(function ($, $$, _mod) {
    'use strict';

    // 模块的 API 和 UI 命名空间
    var _api = _mod.api = _mod.api || {};

	/*
	 * 功能 List (数据操作日志列表) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 页码
	 *     pageIndex: {int64?},
	 * 
	 *     // 页面尺寸
	 *     pageSize: {int64?},
	 * 
	 *     // 排序名称
	 *     orderName: {string(30)?},
	 * 
	 *     // 排序方向
	 *     orderDirection: {string(4)?},
	 * 
	 *     // 用户名
	 *     // 进行数据操作的目标用户的用户名。如果没有提供该参数，则认为查询所有用户记录的消息。支持模糊查询。
	 *     userName: {string(50)?},
	 * 
	 *     // 操作类型代码
	 *     // 数据操作的类型代码：1-查询、2-添加、4-更新、8-删除、16-其他。可以是多个操作的组合，使用二进制或运算进行组合。如果没有提供，则认为查询所有类型的消息。
	 *     opType: {int8?},
	 * 
	 *     // 起始操作时间
	 *     // 查询记录时间大于或等于该时间的日志消息。如果没有提供，则认为查询早于截至时间（如果提供了的话）创建的所有消息。
	 *     timeFrom: {datetime?},
	 * 
	 *     // 截至时间
	 *     // 查询记录时间小于或等于该时间的日志消息。如果没有提供，则认为查询晚于起始时间（如果提供了的话）创建的所有消息。
	 *     timeTo: {datetime?},
	 * 
	 *     // 数据库表名称
	 *     // 所操作的目标数据库表的名称。如果没有提供，则认为查询所有表相关的消息。支持模糊查询。
	 *     tableNames: {string(200)?},
	 * 
	 *     // 存储过程名称
	 *     // 执行操作的存储过程或函数的名称。如果没有提供，则认为查询所有存储过程创建的消息。支持模糊查询。
	 *     procName: {string(128)?},
	 * 
	 *     // 是否成功
	 *     // 指示操作是否已经成功。如果没有提供，则认为查询所有的操作成功和操作失败的消息。
	 *     success: {bool?} 
	 * }
	 * 
	 * 输出(success.result):
	 * {
	 *     // 总行数
	 *     totalRows: {int64?},
	 * 
	 *     // 操作消息列表
	 *     // 符合条件的日志消息的列表。
	 *     messages: [{
	 *         // 消息 Id
	 *         // 日志消息的 Id。
	 *         id: {int64?},
	 * 
	 *         // 用户 Id
	 *         // 进行数据操作的目标用户的 Id，如果是系统操作，则为 null。
	 *         userId: {uuid?},
	 * 
	 *         // 用户名称
	 *         userName: {string?},
	 * 
	 *         // 操作类型代码
	 *         // 数据操作的类型代码：1-查询、2-添加、4-更新、8-删除、16-其他。可以是多个操作的组合，使用二进制或运算进行组合。
	 *         opType: {int8?},
	 * 
	 *         // 操作时间
	 *         // 用户进行数据操作的时间，通常由服务器自动设置为当前数据库服务器的时间。
	 *         opTime: {datetime?},
	 * 
	 *         // 数据库表名称
	 *         // 所操作的目标数据库表的名称，多个之间使用 ',' 分隔。
	 *         tableNames: {string?},
	 * 
	 *         // 存储过程名称
	 *         // 执行操作的存储过程或函数的名称。
	 *         procName: {string?},
	 * 
	 *         // 是否成功
	 *         // 指示操作是否已经成功。
	 *         success: {bool?},
	 * 
	 *         // 操作摘要
	 *         // 操作的摘要信息。
	 *         summary: {string?} 
	 *     }, ...]
	 * }
	 */
    _api.list = $$.api({
        // 请求路径
        url: '~/waln/log/mop/list',

        // 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
        method: 'POST',

        // 对 args 进行验证
        validate: function (e) {
            if (!e.args) {
                e.message = '没有提供任何参数。';
                return;
            }

            // 验证 pageIndex (页码)
            if (!$$.util.is.long(e.args.pageIndex, 1, Long.MAX_VALUE)) {
                e.args.pageIndex = 1; // 默认页码 1
            }

            // 验证 pageSize (页面尺寸)
            if (!$$.util.is.long(e.args.pageSize, 1, 1000)) {
                e.args.pageSize = 20; // 默认页面尺寸 20
            }

            // 验证 orderName (排序名称)
            if (!$$.util.is.identifier(e.args.orderName)) {
                e.args.orderName = 'optime'; // 默认排序名称
            }

            // 验证 orderDirection (排序方向)
            if (!$$.util.is.orderDirection(e.args.orderDirection)) {
                e.args.orderDirection = 'desc'; // 默认排序方向
            }
            
            // 空字符串表示通过验证
            e.message = '';
        },

        // 发送给服务器的数据
        data: function (e) {
            e.data = e.args;
        }
    });

	/*
	 * 功能 Details (详细信息) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 消息 Id
	 *     // 日志消息的 Id。
	 *     id: {int64?} 
	 * }
	 * 
	 * 输出(success.result):
	 * // 消息正文
	 * // 对数据库操作的详细说明信息。
	 * body: {string(20000)?}
	 */
    _api.details = $$.api({
        // 请求路径
        url: '~/waln/log/mop/details',

        // 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
        method: 'POST',

        // 对 args 进行验证
        validate: function (e) {
            // 验证 id
            if (!$$.util.is.long(e.args, 0, Long.MAX_VALUE)) {
                e.message = '没有提供有效的消息 Id。';
                return;
            }

            // 空字符串表示通过验证
            e.message = '';
        },

        // 发送给服务器的数据
        data: function (e) {
            e.data = {
                // 消息 Id
                id: e.args
            };
        }
    });

	/*
	 * 功能 Delete (删除操作消息) 的服务 API。
	 * 
	 * 输入(args):
	 * {
	 *     // 消息 Id 列表
	 *     // 要删除的日志消息的 Id 的列表，多个之间使用 ',' 分隔。
	 *     ids: {string(20000)?} 
	 * }
	 * 
	 * 输出(success.result):
	 * null
	 */
    _api.delete = $$.api({
        // 请求路径
        url: '~/waln/log/mop/delete',

        // 请求方法：WS|WEBSOCKET、UPLOAD、UPOST|UPLOAD-POST、UWS|UPLOAD-WS、POST 之一
        method: 'POST',

        // 对 args 进行验证
        validate: function (e) {
            // 验证 ids
            if (!e.args) {
                e.message = '没有提供有效的消息 Id 列表。';
                return;
            }

            // 空字符串表示通过验证
            e.message = '';
        },

        // 发送给服务器的数据
        data: function (e) {
            e.data = {
                // 消息 Id 列表
                ids: e.args
            };
        }
    });
})(jQuery, pittypat, pittypat.namespace('waln.log.mop'));
